.TH std::is_scoped_enum 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::is_scoped_enum \- std::is_scoped_enum

.SH Synopsis
   Defined in header <type_traits>
   template< class T >              (since C++23)
   struct is_scoped_enum;

   std::is_scoped_enum is a UnaryTypeTrait.

   Checks whether T is a scoped enumeration type. Provides the member constant value
   which is equal to true, if T is a scoped enumeration type. Otherwise, value is equal
   to false.

   If the program adds specializations for std::is_scoped_enum or
   std::is_scoped_enum_v, the behavior is undefined.

.SH Template parameters

   T - a type to check

   Helper variable template

   template< class T >                                                 (since C++23)
   inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;



Inherited from std::integral_constant

.SH Member constants

   value    true if T is a scoped enumeration type, false otherwise
   \fB[static]\fP \fI(public static member constant)\fP

.SH Member functions

   operator bool converts the object to bool, returns value
                 \fI(public member function)\fP
   operator()    returns value
   \fI(C++14)\fP       \fI(public member function)\fP

.SH Member types

   Type       Definition
   value_type bool
   type       std::integral_constant<bool, value>

.SH Notes

      Feature-test macro     Value    Std         Feature
   __cpp_lib_is_scoped_enum 202011L (C++23) std::is_scoped_enum

.SH Possible implementation

   template<typename E>
   struct is_scoped_enum : std::bool_constant<requires
   {
       requires std::is_enum_v<E>;
       requires !std::is_convertible_v<E, std::underlying_type_t<E>>;
   }>
   {};

.SH Example


// Run this code

 #include <type_traits>

 class A {};

 enum E {};

 enum struct Es { oz };

 enum class Ec : int {};

 int main()
 {
     static_assert(std::is_scoped_enum_v<A> == false);
     static_assert(std::is_scoped_enum_v<E> == false);
     static_assert(std::is_scoped_enum_v<Es> == true);
     static_assert(std::is_scoped_enum_v<Ec> == true);
     static_assert(std::is_scoped_enum_v<int> == false);
 }

.SH See also

   is_integral   checks if a type is an integral type
   \fI(C++11)\fP       \fI(class template)\fP
   is_arithmetic checks if a type is an arithmetic type
   \fI(C++11)\fP       \fI(class template)\fP
   is_scalar     checks if a type is a scalar type
   \fI(C++11)\fP       \fI(class template)\fP
   is_enum       checks if a type is an enumeration type
   \fI(C++11)\fP       \fI(class template)\fP
